<?php

namespace app\common\model\user;

use think\Model;
use traits\model\SoftDelete;

class User extends Model
{

    //引用软删除
    use SoftDelete;

    //用户模型
    protected $table = 'pre_user';

    //指定一个自动设置的时间字段
    //开启自动写入
    protected $autoWriteTimestamp = true;

    //设置字段的名字
    protected $createTime = 'createtime'; //插入的时候设置的字段名

    //禁止 写入的时间字段
    protected $updateTime = false;

    // 软删除的字段
    protected $deleteTime = 'deletetime';

    //定义一个模型自带的属性  追加的意思 当用模型来查询时 查询的结果中 会自动带上以下字段
    //获取器的作用 将原本查询到的结果字段来进行二次修改
    //如果获取器没有在下面添加 那么在打印结果的时候 你是看不到字段的 但是获取的时候是能够获取到的
    protected $append = [
        'sex_text',  //性别
        'cover_cdn', //封面获取器
        'avatar_cdn', //头像获取器
    ];

    //定义省份关联模型
    public function provinces()
    {
        //belongsTo('关联模型名','外键名','关联表主键名',['模型别名定义'],'join类型');
        return $this->belongsTo('app\common\model\Region', 'province', 'code', [], 'LEFT')->setEagerlyType(0);
    }

    //定义城市关联模型
    public function citys()
    {
        return $this->belongsTo('app\common\model\Region', 'city', 'code', [], 'LEFT')->setEagerlyType(0);
    }

    //定义区的关联模型
    public function districts()
    {
        return $this->belongsTo('app\common\model\Region', 'district', 'code', [], 'LEFT')->setEagerlyType(0);
    }

    //增加新的字段 sex_text
    public function getSexTextAttr($value, $data)
    {
        $sexlist = [0 => '保密', 1 => '男', 2 => '女'];
        return $sexlist[$data['sex']];
    }

    //增加新字段 是否验证
    public function getAuthTextAttr($value, $data)
    {
        $authlist = [0 => '未验证', 1 => '已验证'];
        return $authlist[$data['auth']];
    }

    //头像图片字段的获取器 avatar_cdn
    //参数1:字段所关联的值 undefined
    //参数2:代表查询结果的 整一条记录
    public function getAvatarCdnAttr($value, $data)
    {      //ltrim($user['cover'], "/")
        $avatar = is_file(ltrim($data['avatar'], "/")) ? '/' . $data['avatar'] : '/static/home/res/images/avatar.jpg';
        //获取的是config.php 当中 cdn选项
        $cdn = config('cdn');

        return $cdn . $avatar;
    }

    //封面字段的获取器
    public function getCoverCdnAttr($value, $data)
    {
        $cover = is_file(ltrim($data['cover'], "/")) ? '/' . $data['cover'] : '/static/home/res/images/back.jpg';
        //获取的是config.php 当中 cdn选项
        $cdn = config('cdn');

        return $cdn . $cover;
    }

    //地区获取器
    public function getRegionAttr($value, $data)
    {
        $province = model('Region')->where(['code' => $data['province']])->find();
        $city = model('Region')->where(['code' => $data['city']])->find();
        $district = model('Region')->where(['code' => $data['district']])->find();

        $output = [];

        if ($province) {
            $output[] = $province['name'];
        }
        if ($city) {
            $output[] = $city['name'];
        }
        if ($district) {
            $output[] = $district['name'];
        }

        return implode('-', $output);
    }
}
